#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

/*
内存分区
1、静态常量
2、堆内存   -->> 需要手动申请 手动释放  系统不会帮你自动释放
    申请堆内存 malloc
    释放堆内存 free
3、栈内存   -->> 系统自动释放
*/

char * func()
{
    // 申请
    char * str = malloc( sizeof(char) * 128 );
    strcpy(str , "张三");
    printf("函数内: %s\n" , str);
    printf(" str = %p\n" , str);
    return str;
}

int main(int argc, char const *argv[])
{
    char * str = func();

    printf(" str = %p\n" , str);

    printf("main 函数 %s\n" , str);

    // 释放  
    free(str);      // 
    str = NULL;     // 防御编程
    printf("%p\n" , str);
    return 0;
}
